# -*- coding: utf-8 -*-
"""
@Time    : 2025/2/27 10:09 
@Author  : ZhangShenao 
@File    : 1.BoW词袋模型.py 
@Desc    : BoW词袋模型

词袋模型比较简单,它忽略了文本中单词的顺序,仅仅关注每个单词出现的次数
在这个模型中,每个文档被转换成一个长向量,向量的长度等于词汇表中单词的数量,每个单词分配一个固定的索引
向量中的每个元素是该单词在文档中出现的次数
"""

from sklearn.feature_extraction.text import CountVectorizer

# 创建语料库
corpus = [
    'Text analysis is fun',
    'Text analysis with Python',
    'Data Science is fun',
    'Python is great for text analysis'
]

# 创建CountVectorizer词袋模型
# 它会按照字母顺序排列所有单词,并为每一个单词分配一个特定的索引位置
vectorizer = CountVectorizer()
print(f"提取特征词: \n{vectorizer.get_feature_names_out()}")

# 使用词袋模型,生成特征向量
# 它是一个4x10的矩阵,因为预料中有4个文档和10个唯一单词
# 每一行代表一个文档,每一列代表词汇表中的一个单词
# 特征值表示该单词在文档中出现的次数
X = vectorizer.fit_transform(corpus)
print(f"特征向量: \n{X.toarray()}")
